#include <iostream>
#include <bitset>
using namespace std;

void IntegerOverflow();

/**
 * 测试基础数据
*/
int main(int argc, char *argv[])
{	
	
	IntegerOverflow();
	return 0;
}

/**
 * 有符号整数溢出(数字溢出)
*/
void IntegerOverflow(){
	/**
	 * 我们值整数33333(如果用auto关键字声明,
	 * 编译器会为该值需要32位的int存储该值,实际该值真正用到就17位,
	 * 除了最高位0作为MSB判断正/负,其余15位是为了内存对齐填充之用),
	 * 但是我们故意强制存储在16字节就会发生溢出,而溢出的部分是前16位的高位地址，
	 * 因为我们声明的变量是short类型为2个字节，CPU只会截取指定的16位中的二进制数据
	*/
	short c=33333;
	cout<<c<<endl;
	/**
	 * 一个bitset是用来储存诸多bit，这些元素可以用来表示两种状态：0或1，true或false…。
	 * 所以有一些时候可以很方便的用该容器快速实现状态储存
	*/
	cout<<bitset<sizeof(short)*8>(c) << endl;
	cout<<bitset<sizeof(short)*8>(-33333)<<endl;
	cout<<bitset<17>(33333)<<endl;
}

/**
 * 副作用2:无符号整数的环绕
*/
void UnsignedTest(){
	
}